package xfuzzy.xfhl.model.hierStruct;

/**
 * Singleton para ir pidiendo estructruas jerarquicas. Tenemos que llamar al
 * metodo setNumVariable para poder utilizar la clase.
 * 
 * @author Sergio Cala Cordero, Septiembre 2009, Herramienta XFHL
 * 
 */
public class XfhlSingleHierStruct {

	/**
	 * Instancia del singleton
	 */
	private static XfhlSingleHierStruct INSTANCE = null;

	/**
	 * Variable que nos dira el numero de variables de cada estructura
	 */
	private static int numVarEnt = -1;

	/**
	 * Constructor privado que nos permite crear el singleton
	 */
	private XfhlSingleHierStruct() {
	}

	/**
	 * Creador sincronizado para protegerse de posibles problemas multi-hilo
	 */
	private synchronized static void createInstance() {
		if (INSTANCE == null) {
			INSTANCE = new XfhlSingleHierStruct();
		}
	}

	/**
	 * Crea la instancia o devuelve la ya creada
	 */
	public synchronized static XfhlSingleHierStruct getInstance() {
		if (INSTANCE == null)
			createInstance();
		return INSTANCE;
	}

	/**
	 * Tenemos que establecer el numero de variables, solo podra hacerse una vez
	 */
	public synchronized static void setNumVarEnt(int numVarE) {
		numVarEnt = numVarE;
		XfhlHierStruct.setNumVarEnt(numVarE);
	}

	/**
	 * Sino hemos actualizado el numero de variables no devolvemos ninguna
	 * estructura
	 */
	public synchronized XfhlHierStruct getXfhlHierStruct() {
		if (numVarEnt != -1)
			return XfhlHierStruct.dameEstructura();
		else
			return null;
	}

}
